- Published on
웹페이지 속도 및 성능을 테스트를 해보자
- 분석
- 1. 초기 서버 응답시간 단축
- 2. 애니메이션 콘텐츠에 동영상 형식 사용하기
- 3. 콘텐츠가 포함된 최대 페인트 이미지 미리 로드
- 4. 이미지 크기 적절하게 설정하기
- 5. 렌더링 차단 리소스 제거하기
이전 글에서 스트레스 테스트를 해 보았습니다. 50~100명정도의 동접자를 수용할 수 있는 것을 확인 하였습니다.
이번엔 속도,SEO, 사이트 퍼포먼스 측정을 해보기 위해 구글에서 제공하는 PageSpeed Insights를 사용해 보겠습니다.
분석
PageSpeed Insights에서 성능 측정을 해보았다.
첫 측정 결과 85점으로 좋지않은 점수를 받았습다.
6개의 메트릭스 중 Speed Index와 LCP의 성능이 떨어지는 것을 확인 할 수 있습니다.
그리고 다음과 같이 성능개선을 위한 추천을 볼 수 있습니다.
다음 항목들을 하나씩 분석 해보도록 하겠습니다.
1. 초기 서버 응답시간 단축
FCP와 LCP부분의 개선 사항이며 사용자 브라우저가 페이지 콘텐츠의 첫 번째 바이트를 수신하는 데 걸리는 시간입니다.
서버 응답시간의 문제점을 분석방법중 하나는 페이지 콘텐츠를 반환하기 위해 서버가 완료해야 하는 핵심 작업을 식별한 다음, 이러한 각 작업에 걸리는 시간을 측정하는 것입니다. 가장 긴 작업을 찾았으면 작업 속도를 높일 방법을 찾아야 합니다.
문제를 발생 할 수 있는 부분은 데이터베이스의 성능, 서버 코드의 성능, 서버 하드웨어의 사양 등 이 있습니다.
서버 응답시간을 개선하는 방법은 아래와 같은 방법들이 있습니다.
서버의 애플리케이션 로직을 최적화하여 페이지를 더 빨리 준비시킵니다. 서버 프레임워크를 사용하는 경우 프레임워크에 이를 수행하는 방법에 대한 권장 사항이 있을 수 있습니다.
서버가 데이터베이스를 쿼리하는 방식을 최적화하거나 더 빠른 데이터베이스 시스템으로 마이그레이션합니다.
서버 하드웨어를 업그레이드하여 메모리 또는 CPU 사양을 높입니다.
저의 프로젝트에서 DB는 PostgreSQL을 사용하고 복잡한 쿼리를 사용하지 않기때문에 DB의 성능 문제일 가능성은 낮아보입니다.
개발에 관련한 성능 저하 이슈가 발생한다면 예상 개선방향으론 사용하지 않는 라이브러리나 자비스크립트를 줄이는 방향으로 개선할 수 있을 것 같으며, 캐싱을 사용하는 방법이 있을 것 같습니다.
하드웨어 관련 사항은 무료로 배포하고 있기 때문에 성능이 좋지 않은 것은 당연한 일이고 이부분에서의 성능저하가 가장 클 것 으로 예상됩니다.
+ 추가
코드의 문제인가 서버의 사양의 문제인가 비교를 하기위해 로컬환경의 성능테스트를 비교해 보았고, 아래와 같은 결과가 나왔습니다.
비교 결과 코드와 DB성능 이슈보단 서버 하드웨어 사양의 문제가 큰 것으로 예상됩니다.
2. 애니메이션 콘텐츠에 동영상 형식 사용하기
이 문제점은 LCP 관련 개선사항이며 현제 GIF(움짤?)파일들을 WebP형식으로 변환하여 최적화 할 수 있어 추천하는 것 입니다.
GIF형식은 오래된 옛날 방법이며 압축률과 표현력의 한계가 있어 2020년 이후부터 개선된 WebP으로 대체되고 있습니다.
하지만 현제 프로젝트에서 이미지들은 아뜨랑스의 이미지를 사용하고 있어 당장 개선할 수 없으며 앞으로 GIF파일은 WebP로 바꾸어 사용해야겠습니다.
3. 콘텐츠가 포함된 최대 페인트 이미지 미리 로드
이 문제점또한 LCP 관련 개선사항입니다.
렌더링시 뷰포트에서 큰 콘텐츠에 priority를 주어 사용자의 체감 렌더링속도를 개선하는 것 입니다.
NextJS의 <next/image>
컴포넌트에 "priority"를 설정하여 개선 합니다.
4. 이미지 크기 적절하게 설정하기
렌더링된 실제 이미지 크기보다 서버로부터 받는 이미지 크기가 더 커서 발생하는 성능 이슈 입니다.
"image size"를 명시하여 필요한 크기만 데이터를 받아오게 수정하여 개선하였습니다.
5. 렌더링 차단 리소스 제거하기
자바스크립트로 인한 FCP와 LCP 관련 성능 이슈입니다.
font 같은 큰 자바스크립트를 가져 올 때 렌더링이 연기되어 버립니다.
Nextjs의 <Script/>
를 사용해 언제 로드해 오는지 명시하여 개선 할 수 있습니다.
하지만 이번프로젝트에서 굳이 Googlefont를 가져 올 필요가 없을 것으로 판단해 필요없는 부하는 빼도록 하겠습니다.
이렇게 추천을 개선 할 사항들을 보았는데 수정 후 어떻게 개선 되었는지 확인 해 보겠습니다.
일단 수정 후 로컬에서의 측정은 다음과 같습니다.
이렇게 LCP를 1.6초 > 0.5초로 개선시키면서 성능 스코어가 100점을 받는 것을 확인 할 수 있었습니다.
실제로 배포 후 다시 성능 측정을 하여 다음과 같이 개선된 것을 확인 할 수 있습니다.
추천사항들을 개선하고 나니 새로운 추천 방법들이 생겼습니다.
다음글에서 계속 개선을 해봅시다.